home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / tree.s < prev    next >
Text File  |  1997-01-31  |  15KB  |  918 lines

  1. ItsATree:
  2.  
  3.  tst.b NASTY
  4.  bne .yesnas
  5.  move.w #-1,12(a0)
  6.  rts
  7. .yesnas:
  8.  
  9.  
  10.  move.w #31*256+31,14(a0)
  11.  move.w #128*256+128,6(a0)
  12.  
  13.  move.b worry(a0),d0
  14.  move.b d0,d1
  15.  and.w #128,d1
  16.  and.b #127,d0
  17.  beq.s .noless
  18.  sub.b #1,d0
  19. .noless:
  20.  add.b d0,d1
  21.  move.b d1,worry(a0)
  22.  
  23.  move.w (a0),CollId
  24.  move.w #80,extlen
  25.  move.b #1,awayfromwall
  26.  
  27.  move.l #20*256,StepUpVal
  28.  move.l #20*256,StepDownVal
  29.  move.l #200*128,thingheight
  30.  move.l #4,deadframe
  31.  move.w #27,screamsound
  32.  move.w #64,nasheight
  33.  clr.b gotgun
  34.  move.w 12(a0),d2
  35.  bge.s .stillalive
  36. .notthisone:
  37.  move.w 12(a0),GraphicRoom(a0)
  38.  rts
  39. .stillalive:
  40.  
  41.  tst.b numlives(a0)
  42.  bgt.s .notdying
  43.  move.b #0,numlives(a0)
  44.  move.l ZoneAdds,a1
  45.  move.l (a1,d2.w*4),a1
  46.  add.l LEVELDATA,a1
  47.  move.l 2(a1),d0
  48.  asr.l #7,d0
  49.  sub.w nasheight,d0
  50.  move.w d0,4(a0)
  51.  
  52.  move.w 10(a0),d0
  53.  cmp.w #9,d0
  54.  bge .onfloordead
  55.  add.w #1,10(a0)
  56.  bra .notthisone
  57.  
  58. .onfloordead:
  59.  
  60.  move.w 12(a0),GraphicRoom(a0)
  61.  rts
  62.  
  63. .notdying: 
  64.  
  65.  tst.b 17(a0)
  66.  beq.s .cantseeplayer
  67.  tst.w ThirdTimer(a0)
  68.  ble TreeAttack
  69.  move.w TempFrames,d0
  70.  sub.w d0,ThirdTimer(a0)
  71.  bge .waitandsee
  72.  move.w #0,ThirdTimer(a0)
  73.  bra .waitandsee
  74.  
  75. .cantseeplayer:
  76.  
  77.  jsr GetRand
  78.  lsr.w #4,d0
  79.  and.w #63,d0
  80.  add.w #20,d0
  81.  move.w d0,ThirdTimer(a0)
  82.  
  83. .waitandsee:
  84.  
  85.  move.w #30,FourthTimer(a0)
  86.  
  87.  move.w 12(a0),d2
  88.  move.l ZoneAdds,a5
  89.  move.l (a5,d2.w*4),d0
  90.  add.l LEVELDATA,d0
  91.  move.l d0,objroom
  92.  
  93.  bsr ViewpointToDraw
  94.  
  95.  asl.l #2,d0
  96.  add.w alframe+2,d0
  97.  add.l #$000f0000,d0
  98.  move.l d0,8(a0)
  99.  
  100.  move.w 4(a0),d0
  101.  sub.w #100,d0
  102.  ext.l d0
  103.  asl.l #7,d0
  104.  move.l d0,newy
  105.  move.l d0,oldy
  106.  
  107.  move.w 12(a0),FromZone
  108.  jsr CheckTeleport
  109.  tst.b OKTEL
  110.  beq.s .notel
  111.  move.l floortemp,d0
  112.  asr.l #7,d0
  113.  add.w d0,4(a0)
  114.  bra .nochangedir
  115. .notel:
  116.  
  117.  move.w maxspd(a0),d2
  118.  muls TempFrames,d2
  119.  move.w d2,speed
  120.  move.w Facing(a0),d0
  121.  move.b ObjInTop(a0),StoodInTop
  122.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  123.  jsr GoInDirection
  124.  move.w #%1000000000,wallflags
  125.  
  126.  move.l #%11011111110111100001,CollideFlags
  127.  jsr Collision
  128.  tst.b hitwall
  129.  beq.s .canmove
  130.  
  131.  move.w oldx,newx
  132.  move.w oldz,newz
  133.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  134.  bra .hitathing
  135.  
  136. .canmove:
  137.  
  138.  clr.b wallbounce
  139.  jsr MoveObject
  140.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  141.  move.b StoodInTop,ObjInTop(a0)
  142.  
  143. .hitathing:
  144.  
  145.  tst.b hitwall
  146.  beq.s .nochangedir
  147.  move.w #-1,ObjTimer(a0)
  148. .nochangedir
  149.  
  150.  move.l objroom,a2
  151.  move.w (a2),12(a0)
  152.  move.w newx,(a1)
  153.  move.w newz,4(a1)
  154.  
  155.  move.w (a2),d0
  156.  move.l #ZoneBrightTable,a5
  157.  move.l (a5,d0.w*4),d0
  158.  tst.b ObjInTop(a0)
  159.  bne.s .okbit
  160.  swap d0
  161. .okbit:
  162.  move.w d0,2(a0)
  163.  
  164.  move.l ToZoneFloor(a2),d0
  165.  tst.b ObjInTop(a0)
  166.  beq.s .notintop
  167.  move.l ToUpperFloor(a2),d0
  168. .notintop:
  169.  asr.l #7,d0
  170.  sub.w #100,d0
  171.  move.w d0,4(a0)
  172.  
  173.  move.b damagetaken(a0),d2
  174.  asr.b #2,d2
  175.  beq .noscream
  176.  
  177.  sub.b d2,numlives(a0)
  178.  bgt .notdeadyet
  179.  
  180. ; cmp.b #1,d2
  181. ; ble.s .noexplode
  182.  
  183.  movem.l d0-d7/a0-a6,-(a7)
  184.  sub.l ObjectPoints,a1
  185.  add.l #ObjRotated,a1
  186.  move.l (a1),Noisex
  187.  move.w #400,Noisevol
  188.  move.w #14,Samplenum
  189.  move.b #1,chanpick
  190.  clr.b notifplaying
  191.  st backbeat
  192.  move.b 1(a0),IDNUM
  193.  jsr MakeSomeNoise
  194.  movem.l (a7)+,d0-d7/a0-a6
  195.  
  196.  movem.l d0-d7/a0-a6,-(a7)
  197.  move.w #0,d0
  198.  move.w #7,d2
  199.  move.w #31,d3
  200.  jsr ExplodeIntoBits
  201.  movem.l (a7)+,d0-d7/a0-a6
  202.  move.w #-1,12(a0)
  203.  move.w 12(a0),GraphicRoom(a0)
  204.  rts
  205.  
  206. .noexplode:
  207.  
  208.  movem.l d0-d7/a0-a6,-(a7)
  209.  sub.l ObjectPoints,a1
  210.  add.l #ObjRotated,a1
  211.  move.l (a1),Noisex
  212.  move.w #200,Noisevol
  213.  move.w screamsound,Samplenum
  214.  move.b #1,chanpick
  215.  clr.b notifplaying
  216.  st backbeat
  217.  move.b 1(a0),IDNUM
  218.  jsr MakeSomeNoise
  219.  movem.l (a7)+,d0-d7/a0-a6
  220.  move.l deadframe,8(a0)
  221.  move.w 12(a0),GraphicRoom(a0)
  222.  rts
  223.  
  224. .notdeadyet:
  225.  clr.b damagetaken(a0)
  226.  movem.l d0-d7/a0-a6,-(a7)
  227.  sub.l ObjectPoints,a1
  228.  add.l #ObjRotated,a1
  229.  move.l (a1),Noisex
  230.  move.w #200,Noisevol
  231.  move.w screamsound,Samplenum
  232.  move.b #1,chanpick
  233.  clr.b notifplaying
  234.  move.b 1(a0),IDNUM
  235.  st backbeat
  236.  jsr MakeSomeNoise
  237.  movem.l (a7)+,d0-d7/a0-a6
  238.  
  239. .noscream
  240.  
  241.  
  242.  move.w TempFrames,d0
  243.  sub.w d0,ObjTimer(a0)
  244.  bge.s .keepsamedir
  245.  
  246.  jsr GetRand
  247.  and.w #8190,d0
  248.  move.w d0,Facing(a0)
  249.  move.w #50,ObjTimer(a0)
  250.  
  251. .keepsamedir:
  252.  
  253.  move.w TempFrames,d0
  254.  sub.w d0,SecTimer(a0)
  255.  bge.s .nohiss
  256.  
  257.  jsr GetRand
  258.  lsr.w #6,d0
  259.  and.w #1,d0
  260.  add.w #17,d0
  261.  movem.l d0-d7/a0-a6,-(a7)
  262.  sub.l ObjectPoints,a1
  263.  add.l #ObjRotated,a1
  264.  move.l (a1),Noisex
  265.  move.w #100,Noisevol
  266.  move.w d0,Samplenum
  267.  move.b #1,chanpick
  268.  clr.b notifplaying
  269.  move.b 1(a0),IDNUM
  270.  st backbeat
  271.  jsr MakeSomeNoise
  272.  movem.l (a7)+,d0-d7/a0-a6
  273.  
  274.  Jsr GetRand
  275.  lsr.w #6,d0
  276.  and.w #255,d0
  277.  add.w #300,d0
  278.  move.w d0,SecTimer(a0)
  279.  
  280. .nohiss:
  281.  
  282.  move.b ObjInTop(a0),ViewerTop
  283.  move.b PLR1_StoodInTop,TargetTop
  284.  move.l PLR1_Roompt,ToRoom
  285.  move.l objroom,FromRoom
  286.  move.w newx,Viewerx
  287.  move.w newz,Viewerz
  288.  move.w PLR1_xoff,Targetx
  289.  move.w PLR1_zoff,Targetz
  290.  move.l PLR1_yoff,d0
  291.  asr.l #7,d0
  292.  move.w d0,Targety
  293.  move.w 4(a0),Viewery
  294.  jsr CanItBeSeen
  295.  
  296.  clr.b 17(a0)
  297.  
  298.  tst.b CanSee
  299.  beq .carryonprowling
  300.  
  301.  move.b #1,17(a0)
  302.  
  303. .carryonprowling:
  304.  
  305.  move.b ObjInTop(a0),ViewerTop
  306.  move.b PLR2_StoodInTop,TargetTop
  307.  move.l PLR2_Roompt,ToRoom
  308.  move.l objroom,FromRoom
  309.  move.w newx,Viewerx
  310.  move.w newz,Viewerz
  311.  move.w PLR2_xoff,Targetx
  312.  move.w PLR2_zoff,Targetz
  313.  move.l PLR2_yoff,d0
  314.  asr.l #7,d0
  315.  move.w d0,Targety
  316.  move.w 4(a0),Viewery
  317.  jsr CanItBeSeen
  318.  
  319.  tst.b CanSee
  320.  beq .carryonprowling2
  321.  
  322.  or.b #2,17(a0)
  323.  
  324. .carryonprowling2:
  325.  
  326.  
  327.  move.w 12(a0),GraphicRoom(a0)
  328.  rts
  329.  
  330. TreeAttack:
  331.  
  332.  move.w 12(a0),d2
  333.  move.l ZoneAdds,a5
  334.  move.l (a5,d2.w*4),d0
  335.  add.l LEVELDATA,d0
  336.  move.l d0,objroom
  337.  
  338.  btst #0,17(a0)
  339.  beq TreeAttackPLR2
  340.  btst #1,17(a0)
  341.  beq TreeAttackPLR1
  342.  
  343.  move.l ObjectPoints,a1
  344.  move.w (a0),d0
  345.  move.w (a1,d0.w*8),d1
  346.  move.w 4(a1,d0.w*8),d2
  347.  
  348.  move.w PLR1_xoff,d3
  349.  move.w PLR1_zoff,d4
  350.  sub.w d1,d3
  351.  sub.w d2,d4
  352.  muls d3,d3
  353.  muls d4,d4
  354.  add.l d4,d3
  355.  move.w PLR2_xoff,d4
  356.  move.w PLR2_zoff,d5
  357.  sub.w d1,d4
  358.  sub.w d2,d5
  359.  muls d4,d4
  360.  muls d5,d5
  361.  add.l d5,d4
  362.  cmp.l d3,d4
  363.  ble TreeAttackPLR2
  364.  
  365.  
  366. TreeAttackPLR1:
  367.  
  368.  
  369.  move.w TempFrames,d0
  370.  sub.w d0,FourthTimer(a0)
  371.  bgt.s .oktoshoot
  372.  move.w #50,ThirdTimer(a0)
  373. .oktoshoot:
  374.  
  375.  move.w 12(a0),d2
  376.  move.l ZoneAdds,a5
  377.  move.l (a5,d2.w*4),d0
  378.  add.l LEVELDATA,d0
  379.  move.l d0,objroom
  380.  
  381.  bsr ViewpointToDraw
  382.  
  383.  asl.l #2,d0
  384.  bne.s .notflfl
  385.  move.l #16,d0
  386. .notflfl:
  387.  
  388.  add.l #$f0000,d0
  389.  move.l d0,8(a0)
  390.  
  391.  move.w PLR1_xoff,newx
  392.  move.w PLR1_zoff,newz
  393.  move.w (a0),d1
  394.  move.l #ObjRotated,a6
  395.  move.l ObjectPoints,a1
  396.  lea (a1,d1.w*8),a1
  397.  lea (a6,d1.w*8),a6
  398.  move.w (a1),oldx
  399.  move.w 4(a1),oldz
  400.  move.w maxspd(a0),d2
  401.  muls.w TempFrames,d2
  402.  move.w d2,speed
  403.  move.w #80,Range
  404.  move.w 4(a0),d0
  405.  ext.l d0
  406.  asl.l #7,d0
  407.  sub.l #100*128,d0
  408.  move.l d0,newy
  409.  move.l d0,oldy
  410.  
  411.  move.b ObjInTop(a0),StoodInTop
  412.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  413.  clr.b canshove
  414.  clr.b GotThere
  415.  jsr HeadTowardsAng
  416.  move.w #%1000000000,wallflags
  417.  
  418.   
  419.  clr.b wallbounce
  420.  Jsr MoveObject
  421.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  422.  move.b StoodInTop,ObjInTop(a0)
  423.  
  424.  move.w AngRet,Facing(a0)
  425.  
  426.  move.l objroom,a2
  427.  move.w (a2),12(a0)
  428.  move.w oldx,(a1)
  429.  move.w oldz,4(a1)
  430.  
  431.  move.w (a2),d0
  432.  move.l #ZoneBrightTable,a5
  433.  move.l (a5,d0.w*4),d0
  434.  tst.b ObjInTop(a0)
  435.  bne.s .okbit
  436.  swap d0
  437. .okbit:
  438.  move.w d0,2(a0)
  439.  
  440.  move.l ToZoneFloor(a2),d0
  441.  tst.b ObjInTop(a0)
  442.  beq.s .notintop
  443.  move.l ToUpperFloor(a2),d0
  444. .notintop:
  445.  asr.l #7,d0
  446.  sub.w #100,d0
  447.  move.w d0,4(a0)
  448.  
  449.  move.b damagetaken(a0),d2
  450.  asr.b #2,d2
  451.  beq .noscream
  452.  
  453.  sub.b d2,numlives(a0)
  454.  bgt .notdeadyet
  455.  
  456. ; cmp.b #1,d2
  457. ; ble.s .noexplode
  458.  
  459.  movem.l d0-d7/a0-a6,-(a7)
  460.  sub.l ObjectPoints,a1
  461.  add.l #ObjRotated,a1
  462.  move.l (a1),Noisex
  463.  move.w #400,Noisevol
  464.  move.w #14,Samplenum
  465.  move.b #1,chanpick
  466.  clr.b notifplaying
  467.  st backbeat
  468.  move.b 1(a0),IDNUM
  469.  jsr MakeSomeNoise
  470.  movem.l (a7)+,d0-d7/a0-a6
  471.  
  472.  movem.l d0-d7/a0-a6,-(a7)
  473.  move.w #0,d0
  474.  move.w #9,d2
  475.  move.w #31,d3
  476.  jsr ExplodeIntoBits
  477.  movem.l (a7)+,d0-d7/a0-a6
  478.  move.w #-1,12(a0)
  479.  move.w 12(a0),GraphicRoom(a0)
  480.  rts
  481.  
  482. .noexplode:
  483.  
  484.  movem.l d0-d7/a0-a6,-(a7)
  485.  sub.l ObjectPoints,a1
  486.  add.l #ObjRotated,a1
  487.  move.l (a1),Noisex
  488.  move.w #200,Noisevol
  489.  move.w screamsound,Samplenum
  490.  move.b #1,chanpick
  491.  clr.b notifplaying
  492.  st backbeat
  493.  move.b 1(a0),IDNUM
  494.  jsr MakeSomeNoise
  495.  movem.l (a7)+,d0-d7/a0-a6
  496.  move.l deadframe,8(a0)
  497.  move.w 12(a0),GraphicRoom(a0)
  498.  rts
  499.  
  500. .notdeadyet:
  501.  clr.b damagetaken(a0)
  502.  movem.l d0-d7/a0-a6,-(a7)
  503.  sub.l ObjectPoints,a1
  504.  add.l #ObjRotated,a1
  505.  move.l (a1),Noisex
  506.  move.w #200,Noisevol
  507.  move.w screamsound,Samplenum
  508.  move.b #1,chanpick
  509.  clr.b notifplaying
  510.  move.b 1(a0),IDNUM
  511.  st backbeat
  512.  jsr MakeSomeNoise
  513.  movem.l (a7)+,d0-d7/a0-a6
  514.  
  515. .noscream
  516.  
  517. ; bra .cantshoot
  518. ; tst.b canshootgun
  519. ; beq .cantshoot
  520.  cmp.w #20,FourthTimer(a0)
  521.  bge .cantshoot
  522.  
  523.  move.w #30,FourthTimer(a0)
  524.  
  525.  jsr GetRand
  526.  and.w #127,d0
  527.  add.w #300,d0
  528.  
  529.  move.w d0,ThirdTimer(a0)
  530.  
  531.  move.l #$f0011,8(a0)
  532.  
  533.  move.l OtherNastyData,a2
  534.  move.w #19,d1
  535. .findonefree
  536.  move.w 12(a2),d2
  537.  blt.s .foundonefree
  538.  adda.w #64,a2
  539.  dbra d1,.findonefree
  540.  bra .cantshoot
  541.  
  542. .foundonefree
  543.  
  544.  move.w #100,FourthTimer(a2)
  545.  move.w #100,ThirdTimer(a2)
  546.  move.w #100,ObjTimer(a2)
  547.  move.w #5,maxspd(a2)
  548.  move.b #17,16(a2)
  549.  move.w 4(a0),4(a2)
  550.  move.b #10,numlives(a2)
  551.  move.b #0,damagetaken(a2)
  552.  move.w Facing(a0),Facing(a2)
  553.  move.w (a2),d0
  554.  move.w (a0),d1
  555.  move.l ObjectPoints,a1
  556.  move.l (a1,d1.w*8),(a1,d0.w*8)
  557.  move.l 4(a1,d1.w*8),4(a1,d0.w*8)
  558.  move.w 12(a0),12(a2)
  559.  st worry(a2)
  560.   
  561. .cantshoot:
  562.  
  563.  
  564.  move.w TempFrames,d0
  565.  sub.w d0,SecTimer(a0)
  566.  bge.s .nohiss
  567.  
  568.  movem.l d0-d7/a0-a6,-(a7)
  569.  sub.l ObjectPoints,a1
  570.  add.l #ObjRotated,a1
  571.  move.l (a1),Noisex
  572.  move.w #100,Noisevol
  573.  move.w #16,Samplenum
  574.  move.b #1,chanpick
  575.  clr.b notifplaying
  576.  move.b 1(a0),IDNUM
  577.  st backbeat
  578.  jsr MakeSomeNoise
  579.  movem.l (a7)+,d0-d7/a0-a6
  580.  
  581.  Jsr GetRand
  582.  lsr.w #6,d0
  583.  and.w #255,d0
  584.  add.w #300,d0
  585.  move.w d0,SecTimer(a0)
  586.  
  587. .nohiss:
  588.  
  589.  move.b ObjInTop(a0),ViewerTop
  590.  move.b PLR1_StoodInTop,TargetTop
  591.  move.l PLR1_Roompt,ToRoom
  592.  move.l objroom,FromRoom
  593.  move.w newx,Viewerx
  594.  move.w newz,Viewerz
  595.  move.w PLR1_xoff,Targetx
  596.  move.w PLR1_zoff,Targetz
  597.  move.l PLR1_yoff,d0
  598.  asr.l #7,d0
  599.  move.w d0,Targety
  600.  move.w 4(a0),Viewery
  601.  jsr CanItBeSeen
  602.  
  603.  clr.b 17(a0)
  604.  tst.b CanSee
  605.  beq .carryonprowling
  606.  
  607.  move.b #1,17(a0)
  608.  
  609. .carryonprowling:
  610.  
  611.  cmp.b #'n',mors
  612.  beq.s .carryonprowling2
  613.  
  614.  
  615.  move.b ObjInTop(a0),ViewerTop
  616.  move.b PLR2_StoodInTop,TargetTop
  617.  move.l PLR2_Roompt,ToRoom
  618.  move.l objroom,FromRoom
  619.  move.w newx,Viewerx
  620.  move.w newz,Viewerz
  621.  move.w PLR2_xoff,Targetx
  622.  move.w PLR2_zoff,Targetz
  623.  move.l PLR2_yoff,d0
  624.  asr.l #7,d0
  625.  move.w d0,Targety
  626.  move.w 4(a0),Viewery
  627.  jsr CanItBeSeen
  628.  
  629.  tst.b CanSee
  630.  beq .carryonprowling2
  631.  
  632.  or.b #2,17(a0)
  633.  
  634. .carryonprowling2:
  635.  
  636.  
  637.  move.w 12(a0),GraphicRoom(a0)
  638.  rts
  639.  
  640. *************************************************
  641.  
  642. TreeAttackPLR2:
  643.  
  644.  
  645.  
  646.  move.w TempFrames,d0
  647.  sub.w d0,FourthTimer(a0)
  648.  bgt.s .oktoshoot
  649.  move.w #50,ThirdTimer(a0)
  650. .oktoshoot:
  651.  
  652.  move.w 12(a0),d2
  653.  move.l ZoneAdds,a5
  654.  move.l (a5,d2.w*4),d0
  655.  add.l LEVELDATA,d0
  656.  move.l d0,objroom
  657.  
  658.  bsr ViewpointToDraw
  659.  
  660.  asl.l #2,d0
  661.  bne.s .notflfl
  662.  move.l #16,d0
  663. .notflfl:
  664.  
  665.  add.l #$f0000,d0
  666.  move.l d0,8(a0)
  667.  
  668.  move.w PLR2_xoff,newx
  669.  move.w PLR2_zoff,newz
  670.  move.w (a0),d1
  671.  move.l #ObjRotated,a6
  672.  move.l ObjectPoints,a1
  673.  lea (a1,d1.w*8),a1
  674.  lea (a6,d1.w*8),a6
  675.  move.w (a1),oldx
  676.  move.w 4(a1),oldz
  677.  move.w maxspd(a0),d2
  678.  muls.w TempFrames,d2
  679.  move.w d2,speed
  680.  move.w #80,Range
  681.  move.w 4(a0),d0
  682.  ext.l d0
  683.  asl.l #7,d0
  684.  sub.l #100*128,d0
  685.  move.l d0,newy
  686.  move.l d0,oldy
  687.  
  688.  move.b ObjInTop(a0),StoodInTop
  689.  movem.l a6/d0/a0/a1/a3/a4/d7,-(a7)
  690.  clr.b canshove
  691.  clr.b GotThere
  692.  jsr HeadTowardsAng
  693.  move.w #%1000000000,wallflags
  694.  
  695.   
  696.  clr.b wallbounce
  697.  Jsr MoveObject
  698.  movem.l (a7)+,a6/d0/a0/a1/a3/a4/d7
  699.  move.b StoodInTop,ObjInTop(a0)
  700.  
  701.  move.w AngRet,Facing(a0)
  702.  
  703.  move.l objroom,a2
  704.  move.w (a2),12(a0)
  705.  move.w oldx,(a1)
  706.  move.w oldz,4(a1)
  707.  
  708.  move.w (a2),d0
  709.  move.l #ZoneBrightTable,a5
  710.  move.l (a5,d0.w*4),d0
  711.  tst.b ObjInTop(a0)
  712.  bne.s .okbit
  713.  swap d0
  714. .okbit:
  715.  move.w d0,2(a0)
  716.  
  717.  move.l ToZoneFloor(a2),d0
  718.  tst.b ObjInTop(a0)
  719.  beq.s .notintop
  720.  move.l ToUpperFloor(a2),d0
  721. .notintop:
  722.  asr.l #7,d0
  723.  sub.w #100,d0
  724.  move.w d0,4(a0)
  725.  
  726.  move.b damagetaken(a0),d2
  727.  asr.b #2,d2
  728.  beq .noscream
  729.  
  730.  sub.b d2,numlives(a0)
  731.  bgt .notdeadyet
  732.  
  733. ; cmp.b #1,d2
  734. ; ble.s .noexplode
  735.  
  736.  movem.l d0-d7/a0-a6,-(a7)
  737.  sub.l ObjectPoints,a1
  738.  add.l #ObjRotated,a1
  739.  move.l (a1),Noisex
  740.  move.w #400,Noisevol
  741.  move.w #14,Samplenum
  742.  move.b #1,chanpick
  743.  clr.b notifplaying
  744.  st backbeat
  745.  move.b 1(a0),IDNUM
  746.  jsr MakeSomeNoise
  747.  movem.l (a7)+,d0-d7/a0-a6
  748.  
  749.  movem.l d0-d7/a0-a6,-(a7)
  750.  move.w #0,d0
  751.  move.w #9,d2
  752.  move.w #31,d3
  753.  jsr ExplodeIntoBits
  754.  movem.l (a7)+,d0-d7/a0-a6
  755.  move.w #-1,12(a0)
  756.  move.w 12(a0),GraphicRoom(a0)
  757.  rts
  758.  
  759. .noexplode:
  760.  
  761.  movem.l d0-d7/a0-a6,-(a7)
  762.  sub.l ObjectPoints,a1
  763.  add.l #ObjRotated,a1
  764.  move.l (a1),Noisex
  765.  move.w #200,Noisevol
  766.  move.w screamsound,Samplenum
  767.  move.b #1,chanpick
  768.  clr.b notifplaying
  769.  st backbeat
  770.  move.b 1(a0),IDNUM
  771.  jsr MakeSomeNoise
  772.  movem.l (a7)+,d0-d7/a0-a6
  773.  move.l deadframe,8(a0)
  774.  move.w 12(a0),GraphicRoom(a0)
  775.  rts
  776.  
  777. .notdeadyet:
  778.  clr.b damagetaken(a0)
  779.  movem.l d0-d7/a0-a6,-(a7)
  780.  sub.l ObjectPoints,a1
  781.  add.l #ObjRotated,a1
  782.  move.l (a1),Noisex
  783.  move.w #200,Noisevol
  784.  move.w screamsound,Samplenum
  785.  move.b #1,chanpick
  786.  clr.b notifplaying
  787.  move.b 1(a0),IDNUM
  788.  st backbeat
  789.  jsr MakeSomeNoise
  790.  movem.l (a7)+,d0-d7/a0-a6
  791.  
  792. .noscream
  793.  
  794. ; tst.b canshootgun
  795. ; beq .cantshoot
  796.  cmp.w #20,FourthTimer(a0)
  797.  bge .cantshoot
  798.  
  799.  move.w #30,FourthTimer(a0)
  800.  
  801.  jsr GetRand
  802.  and.w #127,d0
  803.  add.w #100,d0
  804.  
  805.  move.w d0,ThirdTimer(a0)
  806.  
  807.  
  808.  move.l #$f0011,8(a0)
  809.  
  810.  move.l OtherNastyData,a2
  811.  move.w #19,d1
  812. .findonefree
  813.  move.w 12(a2),d2
  814.  blt.s .foundonefree
  815.  adda.w #64,a2
  816.  dbra d1,.findonefree
  817.  bra .cantshoot
  818.  
  819. .foundonefree
  820.  
  821.  move.w #100,FourthTimer(a2)
  822.  move.w #100,ThirdTimer(a2)
  823.  move.w #5,maxspd(a2)
  824.  move.b #17,16(a2)
  825.  move.b #10,numlives(a2)
  826.  move.b #0,damagetaken(a2)
  827.  move.w Facing(a0),Facing(a2)
  828.  move.w (a2),d0
  829.  move.w (a0),d1
  830.  move.l ObjectPoints,a1
  831.  move.l (a1,d1.w*8),(a1,d0.w*8)
  832.  move.l 4(a1,d1.w*8),4(a1,d0.w*8)
  833.  move.w 12(a0),12(a2)
  834.  st worry(a2)
  835.   
  836. .cantshoot:
  837.  
  838.  
  839.  move.w TempFrames,d0
  840.  sub.w d0,SecTimer(a0)
  841.  bge.s .nohiss
  842.  
  843.  movem.l d0-d7/a0-a6,-(a7)
  844.  sub.l ObjectPoints,a1
  845.  add.l #ObjRotated,a1
  846.  move.l (a1),Noisex
  847.  move.w #100,Noisevol
  848.  move.w #16,Samplenum
  849.  move.b #1,chanpick
  850.  clr.b notifplaying
  851.  move.b 1(a0),IDNUM
  852.  st backbeat
  853.  jsr MakeSomeNoise
  854.  movem.l (a7)+,d0-d7/a0-a6
  855.  
  856.  Jsr GetRand
  857.  lsr.w #6,d0
  858.  and.w #255,d0
  859.  add.w #300,d0
  860.  move.w d0,SecTimer(a0)
  861.  
  862. .nohiss:
  863.  
  864.  move.b ObjInTop(a0),ViewerTop
  865.  move.b PLR1_StoodInTop,TargetTop
  866.  move.l PLR1_Roompt,ToRoom
  867.  move.l objroom,FromRoom
  868.  move.w newx,Viewerx
  869.  move.w newz,Viewerz
  870.  move.w PLR1_xoff,Targetx
  871.  move.w PLR1_zoff,Targetz
  872.  move.l PLR1_yoff,d0
  873.  asr.l #7,d0
  874.  move.w d0,Targety
  875.  move.w 4(a0),Viewery
  876.  jsr CanItBeSeen
  877.  
  878.  clr.b 17(a0)
  879.  tst.b CanSee
  880.  beq .carryonprowling
  881.  
  882.  move.b #1,17(a0)
  883.  
  884. .carryonprowling:
  885.  
  886.  cmp.b #'n',mors
  887.  beq.s .carryonprowling2
  888.  
  889.  
  890.  move.b ObjInTop(a0),ViewerTop
  891.  move.b PLR2_StoodInTop,TargetTop
  892.  move.l PLR2_Roompt,ToRoom
  893.  move.l objroom,FromRoom
  894.  move.w newx,Viewerx
  895.  move.w newz,Viewerz
  896.  move.w PLR2_xoff,Targetx
  897.  move.w PLR2_zoff,Targetz
  898.  move.l PLR2_yoff,d0
  899.  asr.l #7,d0
  900.  move.w d0,Targety
  901.  move.w 4(a0),Viewery
  902.  jsr CanItBeSeen
  903.  
  904.  tst.b CanSee
  905.  beq .carryonprowling2
  906.  
  907.  or.b #2,17(a0)
  908.  
  909. .carryonprowling2:
  910.  
  911.  
  912.  
  913.  
  914.  move.w 12(a0),GraphicRoom(a0)
  915.  rts
  916.  
  917.  
  918.